public class LRUList{
    private int size;
    private LRUListUnit headUnit;
    private LRUListUnit tailUnit;

    //增加一个新的单元到List中
    public void add(LRUListUnit unit){
        if(size==0){
            headUnit=unit;
        }else{
            unit.setPrevUnit(tailUnit);
            tailUnit.setNextUnit(unit);
        }
        tailUnit=unit;
        size++;
    }
    //将List头部的移到末尾并返回
    public LRUListUnit getTop(){
        if(size<=0)
            return null;
        if(size==1)
            return headUnit;
        LRUListUnit tempUnit=headUnit;
        headUnit=headUnit.getNextUnit();
        tempUnit.setNextUnit(null);
        tempUnit.setPrevUnit(tailUnit);
        tailUnit.setNextUnit(tempUnit);
        tailUnit=tempUnit;
        return tempUnit;
    }
    //将unit移到末尾
    public void flash(LRUListUnit unit){
        unit.frequencyAdd();
        if(headUnit.equals(unit)){
            getTop();
            return;
        }
        if(tailUnit.equals(unit)){
            return;
        }
        LRUListUnit beforeUnit=unit.getPrevUnit();
        LRUListUnit afterUnit=unit.getNextUnit();
        beforeUnit.setNextUnit(afterUnit);
        afterUnit.setPrevUnit(beforeUnit);
        unit.setPrevUnit(tailUnit);
        unit.setNextUnit(null);
        tailUnit.setNextUnit(unit);
        tailUnit=unit;
    }

    public void flash(FrameTableUnit frameTableUnit){

    }


    public void deleteUnit(LRUListUnit unit){
        if(headUnit.equals(unit)){
            headUnit=headUnit.getNextUnit();
            headUnit.setPrevUnit(null);
            size--;
            return;
        }
        if(tailUnit.equals(unit)){
            tailUnit=tailUnit.getPrevUnit();
            tailUnit.setNextUnit(null);
            size--;
            return;
        }
        LRUListUnit nowUnit=headUnit.getNextUnit();
        while(nowUnit!=null){
            if(nowUnit.equals(unit)){
                nowUnit.getPrevUnit().setNextUnit(nowUnit.getNextUnit());
                nowUnit.getNextUnit().setPrevUnit(nowUnit.getPrevUnit());
                nowUnit.setPrevUnit(null);
                nowUnit.setNextUnit(null);
                size--;
                return;
            }
            nowUnit=nowUnit.getNextUnit();
        }
    }
}
